package org.tea.inventory.admin.service;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.tea.inventory.admin.dao.AdminToken;
import org.tea.inventory.cache.constans.CacheConstants;
import org.tea.inventory.cache.utils.RedisUtil;
import org.tea.inventory.db.util.CharUtil;

import java.util.HashMap;
import java.util.Map;

public class AdminTokenManager {
    private static Map<String, AdminToken> tokenMap = new HashMap<>();
    private static Map<Integer, AdminToken> idMap = new HashMap<>();
//
//    public static Integer getUserId(String token) {
//
//        AdminToken userToken = tokenMap.get(token);
//        if(userToken == null){
//            return null;
//        }
//
//        if(userToken.getExpireTime().isBefore(LocalDateTime.now())){
//            tokenMap.remove(token);
//            idMap.remove(userToken.getUserId());
//            return null;
//        }
//
//        return userToken.getUserId();
//    }


//    public static AdminToken generateToken(Integer id){
//    	AdminToken userToken=null;
//
//
//        String token = CharUtil.getRandomString(32);
//        while (tokenMap.containsKey(token)) {
//            token = CharUtil.getRandomString(32);
//        }
//
//        LocalDateTime update = LocalDateTime.now();
//        LocalDateTime expire = update.plusDays(1);
//
//        userToken = new AdminToken();
//        userToken.setToken(token);
//        userToken.setUpdateTime(update);
//        userToken.setExpireTime(expire);
//        userToken.setUserId(id);
//        tokenMap.put(token, userToken);
//        idMap.put(id, userToken);
//
//        return userToken;
//    }

    public static AdminToken generateToken(Integer id) {
        AdminToken userToken = null;
        String token = CharUtil.getRandomString(32);
        userToken = new AdminToken();
        userToken.setToken(token);
        userToken.setUserId(id);
        RedisUtil.setExpire(CacheConstants.LOGIN_TOKEN_KEY+token, JSON.toJSONString(userToken), 60 * 60 * 24);
        return userToken;
    }

    public static Integer getUserId(String token) {

        Object obj = RedisUtil.get(CacheConstants.LOGIN_TOKEN_KEY+token);
        if (obj == null) {
            return null;
        }
        AdminToken adminToken = JSONObject.parseObject(obj.toString(),AdminToken.class);
        return adminToken.getUserId();
    }
}
